// 场景：当你在用表格时，需要一个调整行数据的顺序功能，可以把当前的行数据移动到指定的行。
// 问题：
// 1.前端还是后端排序？
// 2.如何把行1换到行3？
// 3.如何让后端把当前的排列顺序保存下来？
// 4.有分页怎么办？
// 5.有过滤条件怎么办？

// 解决方案：
// 1.前端还是后端排序？
// 因为前端排序可以即时把结果展示给用户，如果没有分页和过滤条件，我们这里建议是前端排序，然后把结果传给后端保存。
// 因为如果通过后端排序，开销大，用户体验差。

// 1.如何把行1换到行3？
//     思路：
//         1.当1换到3时，需要1和2先对调位置，再让2和3对调位置
//         2.
// 2.如何让后端把当前的排列顺序保存下来？
//     思路：
//         1.把变更过的数据传给后端
//         2.把全量数据传给后端

const arr=[
    {name:'kevin0',sort:0},
    {name:'kevin1',sort:1},
    {name:'kevin2',sort:2},
    {name:'kevin3',sort:3},
    {name:'kevin4',sort:4},
]

sort(arr,0,3)

// 根据旧索引和新索引，一个个换
function sort(arr,oldIndex,newIndex){
    if(arr.length<1){
        return
    }
    if(oldIndex===newIndex){
        return
    }
    // 判断是否超出范围
    if(!isInRange(oldIndex,0,arr.length) || !isInRange(newIndex,0,arr.length)){
        return false;
    }

    const newArr=JSON.parse(JSON.stringify(arr))

    // 把要移动的元素暂存起来
    const temp=newArr[oldIndex];
     // 把需要移动的元素删除
     newArr.splice(oldIndex,1);

    // 最后插入到对应的位置
    newArr.splice(newIndex,0,temp);
   const min=Math.min(oldIndex,newIndex)
    const max=Math.max(oldIndex,newIndex);
    
    // 更新排序字段
    for(i=min;i<=max;i++){   
        newArr[i].sort=i
    }
    console.log(newArr,newArr.length)
    return newArr;
}

function isInRange(num,min,max){
    return num>=min && num <max
}

//对换位置
function swap(arr,oldIndex,newIndex){
    // 先把行内容对调
    const temp=arr[oldIndex]
    arr[oldIndex]=arr[newIndex]
    arr[newIndex]=temp;
    // 把sort字段更新
    const temp1=arr[oldIndex].sort
    arr[oldIndex].sort=arr[newIndex].sort
    arr[newIndex].sort=temp1;
    return arr;
}
